1. Field of the Invention
This invention relates to computer software, and more particularly to the client side of remoting systems such as Remote Procedure Call (RPC) and messaging systems.
2. Description of the Related Art
Remoting systems make it easier for programmers to write distributed applications. Some types of remoting systems are RPC, messaging, media streaming and group communication. RPC (or Remote Method Invocation—RMI) systems have a programming model where one invokes a method on a remote object just as one invokes a method on a local object. The details of the communication are handled by the remoting infrastructure. Messaging systems are programmed by adding data to a message structure and then giving that structure to the messaging system infrastructure to send to the receiver. Again, the details are handled by the infrastructure.
There are numerous RPC and messaging systems in existence. For example, Java specifies the RMI, JavaIDL, RMI-IIOP, and JAX-RPC RPC systems, and the JMS and JAXM messaging systems. In Java, to communicate using the WS-I profile, the JAX-RPC programming model is used. To communicate using IIOP, RMI-IIOP is used.
Remoting systems (e.g., RPC and Messaging systems) may need or desire to support alternate encodings, protocols and/or transports (EPTs), either because of evolving standards or through dynamic negotiation with a peer. Users of a remoting system do not want to be concerned with such details nor have to change programming models just to use a different protocol. The users want to concentrate on the data being sent.
Remote Procedure Call (RPC)
Remote Procedure Call (RPC) is a protocol that one program can use to request a service from a program located in another computer in a network without having to understand network details. A procedure call is also sometimes referred to as a function call or a subroutine call. RPC uses the client/server model. The requesting program is a client and the service-providing program is the server. Similar to a regular or local procedure call, an RPC is a synchronous operation requiring the requesting program to be suspended until the results of the remote procedure are returned. However, the use of lightweight processes or threads that share the same address space allows multiple RPCs to be performed concurrently.
When program statements that use RPC are compiled into an executable program, a stub is included in the compiled code that acts as the representative of the remote procedure code. When the program is run and the procedure call is issued, the stub receives the request and forwards it to a client runtime program in the local computer. The client runtime program has the knowledge of how to address the remote computer and server application and sends the message across the network that requests the remote procedure. Similarly, the server includes a runtime program and tie that interface with the remote procedure itself. Results are returned in a similar way.
JAX-RPC (Java API for XML-Based RPC) is an application program interface (API) in the Java Web Services Developer Pack (WSDP) that enables Java developers to include remote procedure calls (RPCs) with Web services or other Web-based applications. JAX-RPC is aimed at making it easier for applications or Web services to call other applications or Web services. JAX-RPC provides a programming model for the development of SOAP (Simple Object Access Protocol)-based applications. The JAX-RPC programming model simplifies development by abstracting SOAP protocol-level runtime mechanisms and providing mapping services between Java and the Web Services Description Language (WSDL).
The specification and implementation of Remote Procedure Call (RPC) systems have retread the same ground in many forms, from DCE, to distributed versions of C++, to COM/DCOM, CORBA, RMI and RMI-IIOP, to the more recent XML-RPC and SOAP. The specification and implementation of these systems seems to traverse the same ground repeatedly.